热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正数|升序_[MongoDB]Update更新数据

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[MongoDB]Update更新数据相关的知识,希望对你有一定的参考价值。Update操作只作用于集合中

篇首语:本文由编程笔记#小编为大家整理,主要介绍了[MongoDB]Update更新数据相关的知识,希望对你有一定的参考价值。


Update操作只作用于集合中存在的文档。MongoDB提供了如下方法来更新集合中的文档:


  • db.collection.update()
  • db.collection.updateOne() New in version 3.2
  • db.collection.updateMany() New in version 3.2
  • db.collection.replaceOne() New in version 3.2

你可以通过指定criteria或者filter来指定你想更新的文档:

update函数执行数据更新操作,该函数接受3个主要参数:criteria,action,options:


  • 参数criteria用于指定一个查询,查询选择将要更新的目标记录。
  • 参数action用于指定更新信息,也可以使用操作符来完成。
  • 参数options用于指定更新文档时的选项,可选值包括:upsert和multi。upsert可以指定如果数据存在就更新,不存在就创建数据;multi选项指定是否应该更新所有匹配的文档,或者只更新第一个文档(默认行为)。

为了更好的演示,插入数据:

db.users.insertMany(
[

_id: 1,
name: "sue",
age: 19,
type: 1,
status: "P",
favorites: artist: "Picasso", food: "pizza" ,
finished: [ 17, 3 ],
badges: [ "blue", "black" ],
points: [
points: 85, bonus: 20 ,
points: 85, bonus: 10
]
,

_id: 2,
name: "bob",
age: 42,
type: 1,
status: "A",
favorites: artist: "Miro", food: "meringue" ,
finished: [ 11, 25 ],
badges: [ "green" ],
points: [
points: 85, bonus: 20 ,
points: 64, bonus: 12
]
,

_id: 3,
name: "ahn",
age: 22,
type: 2,
status: "A",
favorites: artist: "Cassatt", food: "cake" ,
finished: [ 6 ],
badges: [ "blue", "Picasso" ],
points: [
points: 81, bonus: 8 ,
points: 55, bonus: 20
]
,

_id: 4,
name: "xi",
age: 34,
type: 2,
status: "D",
favorites: artist: "Chagall", food: "chocolate" ,
finished: [ 5, 11 ],
badges: [ "Picasso", "black" ],
points: [
points: 53, bonus: 15 ,
points: 51, bonus: 15
]
,

_id: 5,
name: "xyz",
age: 23,
type: 2,
status: "D",
favorites: artist: "Noguchi", food: "nougat" ,
finished: [ 14, 6 ],
badges: [ "orange" ],
points: [
points: 71, bonus: 20
]
,

_id: 6,
name: "abc",
age: 43,
type: 1,
status: "A",
favorites: food: "pizza", artist: "Picasso" ,
finished: [ 18, 12 ],
badges: [ "black", "blue" ],
points: [
points: 78, bonus: 8 ,
points: 57, bonus: 7
]

]
)

1. 字段更新操作符


1.1 覆盖更新

下面的例子使用update()函数执行更新数据操作,不包含操作符:

> db.users.find("name":"xyz");
"_id" : 5, "name" : "xyz", "age" : 23, "type" : 2, "status" : "D", "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 14, 6 ], "badges" : [ "orange" ], "points" : [ "points" : 71, "bonus" : 20 ]
>

修改之后:

> db.users.update("name":"xyz", name : "xyz", age:25, school : "xidian", type:1, favorites: artist : "Noguchi", food : "nougat", finished : [4, 5] , upsert:true);
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
>
>
>
> db.users.find("name":"xyz");
"_id" : 5, "name" : "xyz", "age" : 25, "school" : "xidian", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]

该例覆写了集合中的文档,并保存更新后的值。

备注

任何忽略的字段都被移除(文档被覆盖)


1.2 upsert

upsert可以指定如果数据存在就更新,不存在就创建数据。

> db.users.find("name":"yoona");
>
> db.users.update("name":"yoona", name : "yoona", age:25, "school" : "xidian", type:1, favorites: artist : "Noguchi", food : "nougat", finished : [4, 5] , upsert:false);
WriteResult( "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 )

更新操作之前我们没有查询到yoona的任何信息,然后我们对其进行更新操作,并且upsert设置为false,表示如果更新的数据不存在,不走任何操作。更新之后,我们再次查询一下:

> db.users.find("name":"yoona");
>

再次查询还是没有找到相应数据。我们设置upsert为true,表示如果数据存在则更新,如果不存在则创建该数据:

> db.users.update("name":"yoona", name : "yoona", age:25, "school" : "xidian", type:1, favorites: artist : "Noguchi", food : "nougat", finished : [4, 5] , upsert:true);
WriteResult(
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("57c3ad26d2cc0133a95bc583")
)
>
> db.users.find("name":"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 25, "school" : "xidian", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]

1.3 $inc 增加值

操作符$inc可以为指定的键执行(原子)更新操作,如果字段存在,就将该值增加给定的增量,如果该字段不存在,就创建该字段。

> db.users.update("name":"yoona", $inc:age:2);
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
>
>
> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "school" : "xidian", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]

上面例子中将yoona用户的年龄增加两岁。


1.4 $set 设置字段值

可以使用$set操作符将某个字段设置为指定值。

> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "school" : "xidian", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]
>
> db.users.update("name":"yoona", $set:school:"Massachusetts Institute of Technology");
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
>
> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "school" : "Massachusetts Institute of Technology", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]
>

上面例子将yoona用户的学校改为麻省理工学院。


1.5 $unset删除指定字段

> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "school" : "Massachusetts Institute of Technology", "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]
>
> db.users.update("name":"yoona", $unset:school:"Massachusetts Institute of Technology");
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
>
> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]

上面例子将yoona用户的学校删除。


1.6 $rename 重命名字段名称

格式:

$rename: : , : , ...

新字段名称必须不同与已经存在的字段名称

> db.users.find(name:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "name" : "yoona", "age" : 27, "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4, 5 ]
>
> db.users.update("name":"yoona", $rename: name:"userName", age:"userAge");
WriteResult( "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 )
>

查询:

> db.users.find(name:"yoona");
> db.users.find(userName:"yoona");
"_id" : ObjectId("57c3ad26d2cc0133a95bc583"), "type" : 1, "favorites" : "artist" : "Noguchi", "food" : "nougat" , "finished" : [ 4,

推荐阅读
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 开发笔记:select from具体执行相关知识介绍及案例分析
    本文由编程笔记小编整理,主要介绍了select from具体执行相关的知识,包括数据插入、查询最小rowID、查询每个重复名字的最小rowID、删除重复数据等操作,并提供了案例分析。希望对读者有一定的参考价值。 ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • C语言的经典程序有哪些
    本篇内容介绍了“C语言的经典程序有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何 ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • 站点用户可以在站点上注册,并且在注册期间可以提供名称.我希望此名称是有效名称,并且不包含任何HTML和其他时髦字符.strip_tags够吗?解决方法: ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
author-avatar
金berends_941
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有